package model.core.utente;


import model.core.torneo.StatoTorneo;
import model.core.torneo.Torneo;
import model.core.torneo.Gara;

/**
 * 
 * @author Giuseppe Fusco (fusgius19@gmail.com)
 *
 */
public class Commissario extends Studente implements Responsability{

	private String recapito;
	
	public String getRecapito() {
		return recapito;
	}

	public void setRecapito(String recapito) {
		this.recapito = recapito;
	}
	
	/**
	 * @return 
	 * @see model.core.utente.Responsability#penalizzaGiocatore(model.core.utente.Giocatore, model.core.torneo.Torneo, int)
	 */
	public boolean penalizzaGiocatore(Giocatore giocatore, Torneo torneo, int punti) {
		return torneo.getClassifica().penalizzaPunti(giocatore, punti);
	}


	/**
	 * @return 
	 * @see model.core.utente.Responsability#espelliGiocatore(model.core.utente.Giocatore, model.core.torneo.Torneo)
	 */
	public boolean espelliGiocatore(Giocatore giocatore, Torneo torneo) {
		return torneo.getClassifica().removeGiocatore(giocatore);
	}


	/**
	 * @see model.core.utente.Responsability#annullaTorneo(model.core.torneo.Torneo)
	 */
	public boolean annullaTorneo(Torneo torneo) {
		return 
				torneo.setStato(StatoTorneo.ANNULLATO)
				&& torneo.setVincitore((Giocatore) torneo.getClassifica().getGiocatoreAtPosition(1));
	}


	/**
	 * @see model.core.utente.Responsability#sospendiTorneo(model.core.torneo.Torneo)
	 */
	public boolean sospendiTorneo(Torneo torneo) {
		return torneo.setStato(StatoTorneo.SOSPESO);
	}


	/**
	 * @see model.core.utente.Responsability#interrompiTorneo(model.core.torneo.Torneo)
	 */
	public boolean interrompiTorneo(Torneo torneo) {
		return torneo.setStato(StatoTorneo.INTERROTTO);
	}


	/**
	 * @see model.core.utente.Responsability#riprendiTorneo(model.core.torneo.Torneo)
	 */
	public boolean riprendiTorneo(Torneo torneo) {
		return torneo.setStato(StatoTorneo.IN_CORSO);
	}


	/**
	 * @see model.core.utente.Responsability#terminaTorneo(model.core.torneo.Torneo)
	 */
	public boolean terminaTorneo(Torneo torneo) {
		return 
				torneo.setStato(StatoTorneo.TERMINATO) &&
		torneo.setVincitore((Giocatore) torneo.getClassifica().getGiocatoreAtPosition(1));
	}


	/**
	 * @see model.core.utente.Responsability#creaTorneo(java.lang.String, boolean)
	 */
	public Torneo creaTorneo() {
		return new Torneo();
	}


	/**
	 * @see model.core.utente.Responsability#creaGara(java.lang.String, boolean)
	 */
	public Gara creaGara() {
		return new Gara();
	}
	
	public static Commissario createFromStudente(Studente s){
		Commissario g = new Commissario();
		g.setAnno_corso(s.getAnno_corso());
		g.setAnno_immatricolazione(s.getAnno_immatricolazione());
		g.setCognome(s.getCognome());
		g.setData_nascita(s.getData_nascita());
		g.setMatricola(s.getMatricola());
		g.setNome(s.getNome());
		g.setPassword(s.getPassword());
		return g;
	}
	
	public static Commissario createFromGiocatore(Giocatore s){
		Commissario g = new Commissario();
		g.setAnno_corso(s.getAnno_corso());
		g.setAnno_immatricolazione(s.getAnno_immatricolazione());
		g.setCognome(s.getCognome());
		g.setData_nascita(s.getData_nascita());
		g.setMatricola(s.getMatricola());
		g.setNome(s.getNome());
		g.setPassword(s.getPassword());
		return g;
	}

	@Override
	public boolean equals(Object arg0) {
		// TODO Auto-generated method stub
		if(arg0 instanceof Commissario){
			Commissario s = (Commissario)arg0;
			if(s.getMatricola().equals(getMatricola()))
				return true;
			else
				return false;
		}
		else
			return false;
	}
}
